﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace singletonPattern2
{
    class singletonPattern
    {
        static void Main(string[] args)
        {
            //获取单例实例
            Singleton singleton1 = Singleton.GetInstance();

            Singleton.GetInstance().SomeMethod();

            //调用单例对象的方法
            singleton1.SomeMethod();

            //这里尝试使用 new 关键字创建实例，但会编译报错，因为构造函数是私有的,不能在外部访问
            //Singleton anotherInstance = new Singleton();

            //获取单例实例
            Singleton singleton2 = Singleton.GetInstance();

            if (singleton2==singleton1)
            {
                Console.WriteLine("两个实例是一样的。");
            }

            singleton2.SomeMethod();

            Console.ReadLine();

        }
    }

    // 单例模式的类
    public sealed class Singleton
    {
        // 私有静态变量，用于存储唯一实例
        private static Singleton _instance = null;

        // 私有构造函数，防止外部通过 new 关键字创建实例
        private Singleton()
        {
            // 可以在这里进行一些初始化操作
        }

        // 公共静态方法，用于获取单例实例
        public static Singleton GetInstance()
        {
            // 双重锁定，确保多线程环境下实例的唯一性和高效性
            if (_instance == null)
            {
                lock (typeof(Singleton))
                {
                    if (_instance == null)
                    {
                        _instance = new Singleton();
                    }
                }
            }
            return _instance;
        }

        // 其他公共方法和属性
        public void SomeMethod()
        {
            Console.WriteLine("调用单例对象的方法");
        }
    }




}
